% Dieses Script demonstriert die Rekonstruktion anhand eines Bildes von
% einem Gruppenmitglied.
clear;

% Laden der alten Datenbank
load 'faces.mat'

% Hinzufuegen eines Bildes von einem unserer Gruppenmitglieder
img = double(imread('img/schiffl.png'));

[height width] = size(img);

% Einen Spaltenvektor aus dem Bild machen und am Ende der Datenbank
% einfuegen
newface = reshape(img, height * width, 1);
faces(:,end+1) = newface;

% Berechnen der neuen Eigenfaces
[U, V, meanface] = eigenfaces(faces);

% Bild-fuer-Bild Rekonstruktion des Gesichtes ueber Eigenfaces.
for i = 1 : 30
    colormap(gray(256)); % Wir verwenden Graustufenbilder
    rec = reconstruct_face(U, meanface, newface, i);    % Rekonstruktion des Bildes - i principal components werden verwendet
    subplot(8,5,i), imagesc(rec); % Ausgeben des Bildes
    set(gca, 'Visible', 'off'); % Axen ausblenden
    daspect([1 1 1]); % Setzt die Aspect-Ratio, sodass das Bild nicht gestaucht angezeigt wird
end;

% Gegenueberstellung des Originalbilds (links) und des rekonstruierten
% Bildes (rechts)
figure; % Neues Fenster
subplot(1,2,1); imagesc(rec)
colormap(gray(256)); % Wir verwenden Graustufenbilder
set(gca, 'Visible', 'off'); % Axen ausblenden
subplot(1,2,2); imagesc(img)
colormap(gray(256)); % Wir verwenden Graustufenbilder
set(gca, 'Visible', 'off'); % Axen ausblenden

% Animation der Gesichtsrekonstruktion
figure;
animate_face(U, meanface, newface, 30);